import { dataTransformer } from '@libs/common/entities';
import { Type } from 'class-transformer';
import { Column, Entity, PrimaryColumn } from 'typeorm';

export enum CheckType {
  '上班' = 'OnDuty',
  '下班' = 'OffDuty',
}

export enum SourceType {
  /** 指纹/人脸打卡 */
  '考勤机打卡' = 'ATM',
  'IBeacon' = 'BEACON',
  /** 钉钉考勤机 */
  '蓝牙打卡' = 'DING_ATM',
  '用户打卡' = 'USER',
  '老板改签' = 'BOSS',
  /** 审批系统 */
  '补卡' = 'APPROVE',
  /** 考勤系统 */
  '请假' = 'SYSTEM',
  '自动打卡' = 'AUTO_CHECK',
}

export enum TimeResult {
  '正常' = 'Normal',
  '早退' = 'Early',
  '迟到' = 'Late',
  '严重迟到' = 'SeriousLate',
  '旷工迟到' = 'Absenteeism',
  /** 包含(补卡,请假) */
  '未打卡' = 'NotSigned',
}

@Entity('crm_node_hr_attendance')
export class Attendance {
  @PrimaryColumn({ comment: 'ID' })
  @Type(() => String)
  id: string;

  @Column({ comment: '钉钉 id' })
  @Type(() => String)
  dingUserId: string;

  @Column({ comment: '打卡记录ID', nullable: true })
  @Type(() => String)
  recordId: string;

  @Column({
    type: 'enum',
    enum: SourceType,
    comment:
      '打卡方式，ATM（考勤机打卡（指纹/人脸打卡）），BEACON（IBeacon），DING_ATM（钉钉考勤机（考勤机蓝牙打卡）），USER（用户打卡），BOSS（老板改签），APPROVE（审批系统），SYSTEM（考勤系统），AUTO_CHECK（自动打卡）',
  })
  sourceType: SourceType | string;

  @Column({
    type: 'enum',
    enum: CheckType,
    comment: '考勤类型，OnDuty（上班），OffDuty（下班）',
  })
  checkType: CheckType | string;

  @Column({
    type: 'enum',
    enum: TimeResult,
    comment:
      '打卡结果，Normal（正常），Early（早退），Late（迟到），SeriousLate（严重迟到），Absenteeism（旷工迟到），NotSigned（未打卡）',
  })
  timeResult: SourceType | string;

  @Column({
    type: 'date',
    comment: '打卡日期',
    transformer: dataTransformer,
  })
  workDate: Date | number | string;

  @Column({
    type: 'datetime',
    comment: '考核时间 计算迟到和早退，基准时间。',
    transformer: dataTransformer,
  })
  baseCheckTime: Date;

  @Column({
    type: 'datetime',
    comment: '打卡时间 实际打卡时间, 用户打卡时间的毫秒数。',
    transformer: dataTransformer,
  })
  userCheckTime: Date;

  @Column({ comment: '所在部门' })
  deptNameList: string;

  @Column({ comment: '姓名' })
  name: string;

  @Column({ comment: '职位' })
  position: string;

  @Column({ comment: '用户ID' })
  userId: string;
}
